package com.softeem.music_sys.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.softeem.music_sys.comm.Result;
import com.softeem.music_sys.entity.Admin;
import com.softeem.music_sys.mapper.AdminMapper;
import com.softeem.music_sys.service.AdminService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

//对外提供访问接口
@Tag(name = "管理员接口",description = "管理员相关操作：添加，登录，检索，修改等")
@RestController
public class AdminController {

    @Autowired
    private AdminService adminService;

    //管理员新增
    @Operation(summary = "管理员新增",description = "管理员新增,提供json格式管理员数据")
    @PostMapping("/admin")
    public Result add(@RequestBody Admin admin){
        return adminService.add(admin);
    }

    //管理员登录
    @Operation(summary = "管理员登录",description = "管理员登录，提供用户名和密码")  //接口说明
    @Parameters({   //接口所需参数说明
        @Parameter(name = "username",description = "用户名"),
        @Parameter(name = "password",description = "密码")
    })
    @GetMapping("/admin/login")
    public Result login(String username, String password){
        return adminService.login(username,password);
    }

    //管理员修改
    @Operation(summary = "管理员修改",description = "管理员修改，提供json格式管理员数据")
    @PutMapping("/admin")
    public Result update(@RequestBody Admin admin){
        boolean b = adminService.updateById(admin);
        return b ? Result.success().setMsg("修改成功") : Result.fail("修改失败");
    }

    //删除管理员    http://127.0.0.1:8080/admin/10
    @Operation(summary = "管理员删除",description = "管理员删除，提供管理员id")
    @Parameters({
        @Parameter(name = "id",description = "管理员id")
    })
    @DeleteMapping("/admin/{id}")
    public Result delete(@PathVariable Integer id){
        //判断管理员是否不存在
        Admin admin = adminService.getById(id);
        if(admin == null){
            return Result.fail("管理员不存在");
        }
        //封装，继承，多态
        boolean b = adminService.removeById(id);
        return b ? Result.success().setMsg("删除成功") : Result.fail("删除失败");
    }

    //管理员列表查询（含分页）
    @Operation(summary = "管理员列表查询",description = "管理员列表查询，提供分页参数")
    @Parameters({
        @Parameter(name = "page",description = "页码"),
        @Parameter(name = "limit",description = "每页数量")
    })
    @GetMapping("/admin/list")
    public Result list(
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "5") Integer limit
    ){
        //创建分页对象
        Page<Admin> pageUtil = new Page<>(page,limit);
        //执行分页查询
        List<Admin> list = adminService.list(pageUtil);
        //返回查询结果
        return Result.success().setData(list);
    }
}
